﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Entities;
using Model;

namespace BLL
{
	public class GrupoDespesaBll
	{
        public static readonly Container db = new Container();

		/// <summary>
		/// Faz uma pesquisa e retorna o GrupoDespesa de acordo com o código do GrupoDespesa com o nome de usuário
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="id">Int</param>
		/// <param name="usuario">String</param>
		/// <returns>GrupoDespesa</returns>
		public static GrupoDespesa GetGrupoDespesa(int id, string usuario)
		{
			return db.GrupoDespesa.FirstOrDefault(f => f.Id == id && f.Pessoa.Usuario == usuario);
		}
		
		/// <summary>
		/// Retorna uma lista de GrupoDespesas por id de usuário (Pessoa.Id)
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="idPessoa">Int</param>
		/// <param name="mes">Int</param>
		/// <param name="ano">Int</param>
		/// <param name="cadastro">Boolean</param>
		/// <returns>Lista de GrupoDespesas</returns>
		public static List<GrupoDespesa> GetLista(int idPessoa)
		{
			return db.GrupoDespesa.Where(w => w.PessoaId == idPessoa).ToList();
		}

		/// <summary>
		/// Retorna uma lista de GrupoDespesas por nome de usuário (Pessoa.Usuario ou User.Identity.Name)
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="usuario">String</param>
		/// <returns>Lista de GrupoDespesas</returns>
		public static List<GrupoDespesa> GetLista(string usuario)
		{
			return db.GrupoDespesa.Where(w => w.Pessoa.Usuario == usuario).ToList();
		}

		public static int GetId(string usuario)
		{
			return db.GrupoDespesa.Where(w => w.Pessoa.Usuario == usuario).Select(s => s.Id).FirstOrDefault();
		}

		/// <summary>
		/// Retorna um dicionário de dados para preenchimento de combobox de GrupoDespesa por Id de Pessoa
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="idPessoa">Int</param>
		/// <returns>Dictionary(string, int)</returns>
		public static List<GrupoDespesa> PreencheComboGrupoDespesa(int idPessoa)
		{
            return db.GrupoDespesa.Where(w => w.PessoaId == idPessoa).ToList();
		}

		/// <summary>
		/// Retorna um dicionário de dados para preenchimento de combobox de GrupoDespesa por nome de Usuário
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="usuario">strin</param>
		/// <returns>Dictionary(string, int)</returns>
		public static List<GrupoDespesa> PreencheComboGrupoDespesa(string usuario)
		{			
			return db.GrupoDespesa.Where(w => w.Pessoa.Usuario == usuario).ToList();			
		}

		/// <summary>
		/// Grava o GrupoDespesa no banco de dados
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="p">GrupoDespesa</param>
		/// <returns>Boolean</returns>
		public static bool Add(GrupoDespesa gp)
		{
			try
			{
				db.GrupoDespesa.AddObject(gp);
				db.SaveChanges();
				return true;
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		/// <summary>
		/// Altera o GrupoDespesa no banco de dados
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="p">GrupoDespesa</param>
		/// <returns>Boolean</returns>
		public static bool Edit(GrupoDespesa gp)
		{
			try
			{
				db.GrupoDespesa.ApplyCurrentValues(gp);
				db.SaveChanges();
				return true;
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		/// <summary>
		/// Exclui um GrupoDespesa do banco de dados
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="p">GrupoDespesa</param>
		/// <returns>Boolean</returns>
		public static bool Delete(int id)
		{
			try
			{
				var gp= db.GrupoDespesa.FirstOrDefault(f => f.Id == id);
				db.GrupoDespesa.DeleteObject(gp);
				db.SaveChanges();
				return true;
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
	}
}